package com.yystar.support.util;

import java.util.HashMap;
import java.util.Map;

import com.yystar.support.filter.CacheResponseData;

/**
 * 缓存操作类
 * @author liuzhifei
 *
 */
public class CacheUtility {
    
    //静态缓存数据集
    private static final Map<String, CacheResponseData> _cachedata = new HashMap<String, CacheResponseData>();
    
    public static final String CACHE_NAME =  "staticResource";
    /**
     * 清除所有的缓存
     */
    public static void clearCache() {
        _cachedata.clear();
    }
    
    /**
     * 清除指定静态文件的缓存
     * @param uri  请求的uri, 可以通过request.getRequestURI()获取
     */
    public static void clearCache(String uri) {
        if(WTextUtility.isNotNull(uri)){
            //通过uri生成缓存key值
            String key = getCacheKey(uri);
            
            if(_cachedata.containsKey(key)){
                _cachedata.remove(key);
            }
        }
    }
    
    /**
     * 通过URI获取静态缓存文件数据
     * @param uri 请求的uri, 可以通过request.getRequestURI()获取
     * @return 缓存数据 Model
     */
    public static CacheResponseData getCacheData(String uri){
        if(WTextUtility.isNull(uri)){
            return null;
        }
        
        //通过uri生成缓存key值
        String key = getCacheKey(uri);
        return _cachedata.get(key);
    }
    
    /**
     * 将缓存数据 Model 添加到缓存集中
     * @param uri 请求的uri, 可以通过request.getRequestURI()获取
     * @param data 缓存数据 Model
     */
    public static void putCacheData(String uri, CacheResponseData data){
        if(WTextUtility.isNotNull(uri)){
            //通过uri生成缓存key值
            String key = getCacheKey(uri);
            _cachedata.put(key, data);
        }
    }
    
    /**
     * 通过uri 生成缓存key值
     * @param uri 请求的uri, 可以通过request.getRequestURI()获取
     * @return 生成后的key
     */
    public static String getCacheKey(String uri) {
        return WTextUtility.toHexString(uri.hashCode());
    }
    
    /**
     * 缓存是否存在
     * @param uri 请求的uri, 可以通过request.getRequestURI()获取
     * @return true 存在   ,  false 不存在
     */
    public static boolean containsCache(String uri){
        if(WTextUtility.isNotNull(uri)){
          //通过uri生成缓存key值
            String key = getCacheKey(uri);
            return _cachedata.containsKey(key);
        }
        return false;
    }
}
